package com.yuanfengerp.fileManage.fileService;

import org.springframework.core.io.Resource;
import org.springframework.core.io.UrlResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.List;

@Service
public class FileService {

    // 定义文件上传目录
    private static final String UPLOAD_DIR = "D:/MyFile/";

    // 保存文件的方法
    public void saveFile(MultipartFile file) throws IOException {
        // 创建目标文件对象
        File destFile = new File(UPLOAD_DIR + file.getOriginalFilename());
        // 将上传的文件传输到目标文件
        file.transferTo(destFile);
    }

    // 下载文件的方法
    public ResponseEntity<Resource> downloadFile(String filename) {
        try {
            // 创建文件对象
            File file = new File(UPLOAD_DIR + filename);
            // 创建资源对象
            Resource resource = new UrlResource(file.toURI());
            // 检查文件是否存在或可读
            if (resource.exists() || resource.isReadable()) {
                // 返回文件资源，并设置响应头
                return ResponseEntity.ok()
                        .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + filename + "\"")
                        .body(resource);
            } else {
                // 文件不存在或不可读，返回 404
                return ResponseEntity.notFound().build();
            }
        } catch (MalformedURLException e) {
            // URL 格式错误，返回 400
            return ResponseEntity.badRequest().body(null);
        }
    }

    // 列出所有文件及其信息的方法
    public List<FileDetails> listFiles() {
        // 创建文件夹对象
        File folder = new File(UPLOAD_DIR);
        // 获取文件夹中的所有文件
        File[] listOfFiles = folder.listFiles();
        // 创建文件信息列表
        List<FileDetails> filesInfo = new ArrayList<>();

        // 检查文件列表是否为空
        if (listOfFiles != null) {
            // 遍历文件列表
            for (File file : listOfFiles) {
                // 如果是文件，则添加到文件信息列表中
                if (file.isFile()) {
                    filesInfo.add(new FileDetails(file.getName(), file.length()));
                }
            }
        }
        // 返回文件信息列表
        return filesInfo;
    }

    // 文件详细信息类
    public static class FileDetails {
        // 文件名
        private String name;
        // 文件大小
        private long size;

        // 构造函数
        public FileDetails(String name, long size) {
            this.name = name;
            this.size = size;
        }

        // 获取文件名
        public String getName() {
            return name;
        }

        // 获取文件大小
        public long getSize() {
            return size;
        }
    }
     // 删除文件的方法
    public ResponseEntity<String> deleteFile(String filename) {
        try {
            // 创建文件对象
            File file = new File(UPLOAD_DIR + filename);
            // 检查文件是否存在
            if (file.exists() && file.isFile()) {
                // 删除文件
                if (file.delete()) {
                    return ResponseEntity.ok("File deleted successfully");
                } else {
                    return ResponseEntity.internalServerError().body("Failed to delete file");
                }
            } else {
                return ResponseEntity.notFound().build();
            }
        } catch (Exception e) {
            // 处理异常情况
            return ResponseEntity.badRequest().body("Error occurred: " + e.getMessage());
        }
    }
}
